<?php

namespace Maestros\Controller\Service;

use Zend\Db\Adapter\Adapter;
use Componentes\Controller\UtilsArrayController;
use Maestros\Model\Entity\Especialidad;
use Maestros\Controller\Service\GenericService;
use Maestros\Model\Dao\EspecialidadDao;

class EspecialidadService extends GenericService {
    
    /**
     * @var Zend\Db\Adapter\Adapter 
     */
    private $dbAdapter;
    private static $especialidadService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public static function getInstance($adapter) {
        if (self::$especialidadService == null) {
            self::$especialidadService = new EspecialidadService($adapter);
        }
        return self::$especialidadService;
    }

    public function getEspecialidadDao() {
        return EspecialidadDao::getInstance($this->dbAdapter);
    }
    
        public function getRegistroCompleto($id) {
        $especialidad = $this->obtenerEspecialidadSegunId($id);
        $mensaje = 'ESPECIALIDAD ENCONTRADA';
        $data = null;
        $success = false;
        if ($especialidad->getId() != null) {
            $data[0] = $especialidad->objectToArray();
            $success = true;
            $mensaje = 'ESPECIALIDAD ENCONTRADA';
        }
        $output = array(
            'success' => $success,
            'data' => $data,
            'total' => count($data),
            'mensaje' => $mensaje
        );
        return $output;
    }
    
    public function getEspecialidadSegunCodigoAnterior($codigoAnterior){
        $especialidad = $this->obtenerEspecialidadSegunCodigoAnterior($codigoAnterior);
        $mensaje = 'Especialidad no Encontrada';
        $data = null;
        $success = false;
        if ($especialidad->getId() != null) {
            $data[0] = $especialidad->objectToArray();
            $success = true;
            $mensaje = 'Especialidad Encontrada';
        }
        $output = array(
            'success' => $success,
            'data' => $data,
            'total' => count($data),
            'mensaje' => $mensaje
            
        );
        return $output;
        
    }
    
    //------Retornan los objetos-------

    /**
     * Dado el codigo el codigo anterior de la especialidad  trae el registro asociado de la tabla especialiadad
     * @param $codigoAnterior type string
     * @return Objeto Especialidad
     */
    
    public function obtenerEspecialidadSegunId($id) {
        $registros = $this->getEspecialidadDao()->getRegistro($id);
        $data = UtilsArrayController::llenarData($registros);
        $especialidad = new Especialidad($data[0]);
        $especialidad->setId($data[0]['id']);
        $especialidad->setNombre($data[0]['nombre']);
        $especialidad->setFechaCreacion($data[0]['fecha_creacion']);
        $especialidad->setCodigoAnterior($data[0]['codigo_anterior']);
        return $especialidad;
    }
    
    public function obtenerEspecialidadSegunCodigoAnterior($codigoAnterior) {
        $registros = $this->getEspecialidadDao()->getEspecialidadSegunCodigoAnterior($codigoAnterior);
        $data = UtilsArrayController::llenarData($registros);
        $especialidad = new Especialidad($data[0]);
        $especialidad->setId($data[0]['id']);
        $especialidad->setNombre($data[0]['nombre']);
        $especialidad->setFechaCreacion($data[0]['fecha_creacion']);
        $especialidad->setCodigoAnterior($data[0]['codigo_anterior']);
        return $especialidad;
    }




    //put your code here
}
